#!/bin/bash

# 定义颜色输出函数
red() { echo -e "\033[31m\033[01m[WARNING] $1\033[0m"; }
green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; }
greenline() { echo -e "\033[32m\033[01m $1\033[0m"; }
yellow() { echo -e "\033[33m\033[01m[NOTICE] $1\033[0m"; }
blue() { echo -e "\033[34m\033[01m[MESSAGE] $1\033[0m"; }
light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
highlight() { echo -e "\033[32m\033[01m$1\033[0m"; }
cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; }


# 检查是否以 root 用户身份运行
if [ "$(id -u)" -ne 0 ]; then
    green "注意！输入密码过程不显示*号属于正常现象"
    echo "此脚本需要以 root 用户权限运行，请输入当前用户的密码："
    # 使用 'sudo' 重新以 root 权限运行此脚本
    sudo -E "$0" "$@"
    exit $?
fi

# 设置全局快捷键p
cp -f "$0" /usr/local/bin/p
chmod +x /usr/local/bin/p


declare -a menu_options
declare -A commands
menu_options=(
	"设置开机自启动热点"
	"修改docker镜像源"
	"使用本地域名解析mDNS"  
	"配置无线网卡"  
	"连接无线网络"  
	"修改网卡接口名"  
    "更新脚本"
)

commands=(
	["设置开机自启动热点"]="setup_hotspot_on_boot"  
	["修改docker镜像源"]="modify_docker_mirror"  
	["使用本地域名解析mDNS"]="setup_mdns"  
	["配置无线网卡"]="connect_wireless_network"  
	["连接无线网络"]="connect_wifi_network"  
	["修改网卡接口名"]="modify_network_interface_name"
	["更新脚本"]="update_scripts"
	


)


# 设置开机自启动热点
setup_hotspot_on_boot() {
    # 第一步：创建一个新的 systemd 服务文件
    cat >/etc/systemd/system/create-ap.service <<EOF
[Unit]
Description=Create Wi-Fi Hotspot on boot
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/create_ap --no-virt -m nat wlan0 eth0 orangepi orangepi --freq-band 5
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target
EOF

    # 第二步：启用并启动服务
    green "重新加载系统服务配置..."
    sudo systemctl daemon-reload
    green "设置开机启动..."
    sudo systemctl enable create-ap.service
    green "立即启动服务..."
    sudo systemctl start create-ap.service

    # 第三步：检查服务状态
    green "检查服务状态..."
    sudo systemctl status create-ap.service
}


# 修改docker镜像源
modify_docker_mirror() {
    mkdir -p /etc/docker
    cat > /etc/docker/daemon.json <<-EOF
    {
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.sunzishaokao.com"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"]
    }
EOF

    systemctl daemon-reload
    systemctl restart docker
    green "Docker 镜像源已修改并重启 Docker 服务。"
}


# 未接入网络时访问系统方法 - 使用本地域名解析（mDNS）
setup_mdns() {
    green "开始安装 Avahi-daemon..."
    sudo apt install avahi-daemon -y
    if [ $? -ne 0 ]; then
        red "安装 Avahi-daemon 失败，请检查网络或手动安装。"
        return 1
    fi

    green "设置主机名为 mycasaos..."
    sudo hostnamectl set-hostname mycasaos
    if [ $? -ne 0 ]; then
        red "设置主机名失败，请手动设置。"
        return 1
    fi

    green "开放 UDP 5353 端口..."
    sudo iptables -A INPUT -p udp --dport 5353 -j ACCEPT
    if [ $? -ne 0 ]; then
        red "开放 UDP 5353 端口失败，请手动开放。"
        return 1
    fi

    green "配置完成，你可以通过 http://mycasaos.local 访问系统。"
}


# 连接无线网卡
connect_wireless_network() {
    green "查看接口列表..."
    ip addr

    read -p "请输入要启用的接口名: " interface

    green "启用接口 $interface..."
    sudo ip link set $interface up

    green "验证接口 $interface 状态..."
    ip link show $interface

    green "安装 NetworkManager..."
    sudo apt update && sudo apt install network-manager -y

    green "启用 NetworkManager 服务..."
    sudo systemctl enable --now network-manager
}


# 连接无线网络
connect_wifi_network() {
    green "扫描可用的WiFi网络..."
    sudo nmcli dev wifi list

    read -p "请输入网卡名: " interface
    read -p "请输入要连接的WiFi名称: " wifi_name
    read -s -p "请输入WiFi密码: " wifi_password
    echo

    green "正在连接到 $wifi_name..."
    sudo nmcli dev wifi connect "$wifi_name" password "$wifi_password" ifname "$interface"

    green "验证连接状态..."
    nmcli dev status
}

# 修改网卡接口名
modify_network_interface_name() {
    read -p "请输入当前网卡接口名（例如 wlx4c4d66400589）: " current_interface

    green "正在确定网卡的硬件信息..."
    ip link show "$current_interface"

    read -p "请从上面的输出中复制网卡的 MAC 地址（例如 4c:4d:66:40:05:89）并粘贴到这里: " mac_address
    read -p "请输入你想要使用的新接口名称（例如 usbwlan）: " new_interface

    green "正在创建或编辑 udev 规则文件..."
    echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$mac_address\", NAME=\"$new_interface\"" | sudo tee -a /etc/udev/rules.d/70-persistent-net.rules

    green "重新加载 udev 规则..."
    sudo udevadm trigger

    read -p "是否要重启系统以应用更改？(y/n): " confirm
    if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
        green "正在重启系统..."
        sudo reboot
    else
        green "请手动重启系统以应(通过ip addr验证是否生效)"
    fi
}





# 更新自己
update_scripts() {
    wget -O pi.sh https://gitee.com/liuliuliuyang/orangepi3b/raw/master/main/xu.sh && chmod +x pi.sh
    echo "脚本已更新并保存在当前目录 pi.sh,现在将执行新脚本。"
    ./xu.sh
    exit 0
}




show_menu() {

    clear
    greenline "————————————————————————————————————————————————————"
    echo '
    *********** 香橙派3b轻服务器配置 ***************
    环境: (Ubuntu)
    脚本作用:快速部署香橙派3b轻服务器'
    echo -e "    https://www.baidu.com"
    greenline "————————————————————————————————————————————————————"
    yellow "再次运行输入 p 即可调用本脚本"
    echo "请选择操作："

    # 高亮菜单项
    special_items=()
    for i in "${!menu_options[@]}"; do
        if [[ " ${special_items[*]} " =~ " ${menu_options[i]} " ]]; then
            # 如果当前项在特殊处理项数组中，使用特殊颜色
            cyan "$((i + 1)). ${menu_options[i]}"
        else
            # 否则，使用普通格式
            echo "$((i + 1)). ${menu_options[i]}"
        fi
    done
}

handle_choice() {
    local choice=$1
    # 检查输入是否为空
    if [[ -z $choice ]]; then
        echo -e "${RED}输入不能为空，请重新选择。${NC}"
        return
    fi

    # 检查输入是否为数字
    if ! [[ $choice =~ ^[0-9]+$ ]]; then
        echo -e "${RED}请输入有效数字!${NC}"
        return
    fi

    # 检查数字是否在有效范围内
    if [[ $choice -lt 1 ]] || [[ $choice -gt ${#menu_options[@]} ]]; then
        echo -e "${RED}选项超出范围!${NC}"
        echo -e "${YELLOW}请输入 1 到 ${#menu_options[@]} 之间的数字。${NC}"
        return
    fi

    # 执行命令
    if [ -z "${commands[${menu_options[$choice - 1]}]}" ]; then
        echo -e "${RED}无效选项，请重新选择。${NC}"
        return
    fi

    "${commands[${menu_options[$choice - 1]}]}"
}

while true; do
    show_menu
    read -p "请输入选项的序号(输入q退出): " choice
    if [[ $choice == 'q' ]]; then
        break
    fi
    handle_choice $choice
    echo "按任意键继续..."
    read -n 1 # 等待用户按键
done
